package com.hgl.bi.common.model.vo;

import com.hgl.bi.common.constant.ErrorCode;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

/**
 * @program: BI
 * @description: 统一返回体
 * @author: hgl
 * @create: 2025-02-09 16:54
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class R<T> implements Serializable {

    private static final long serialVersionUID = 1L;

    private Integer code;

    private String message;

    private T data;

    /**
     * 有参构造方法
     *
     * @param errorCode 错误码
     * @param data 响应数据
     * @author hgl
     */
    public R(ErrorCode errorCode, T data) {
        this.code = errorCode.getCode();
        this.message = errorCode.getMessage();
        this.data = data;
    }

    /**
     * 请求成功执行
     *
     * @param data 响应数据
     * @return R
     * @author hgl
     */
    public static <T> R<T> success(T data) {
        return new R<>(ErrorCode.SUCCESS, data);
    }
    /**
     * 请求成功执行
     *
     * @param prompt 响应提示词
     * @return R<String>
     * @author hgl
     */
    public static R<String> ok(String prompt) {
        return new R<>(ErrorCode.SUCCESS.getCode(), prompt, null);
    }

    /**
     * 自定义抛异常
     *
     * @param errorCode 错误码
     * @return R
     * @author hgl
     */
    public static <T> R<T> fail(ErrorCode errorCode) {
        return new R<>(errorCode, null);
    }

    /**
     * 请求异常执行
     *
     * @param code 错误码
     * @param message 错误信息
     * @return R
     * @author hgl
     */
    public static <T> R<T> fail(Integer code, String message) {
        return new R<>(code, message, null);
    }

}
